网络编程

网络基础

Client-Serve模型

image-20240106140750208

网络硬件

image-20240106140824533

image-20240106140837315

image-20240106140852046

image-20240106140902806

image-20240106140914225

网络传输

image-20240106141033294

image-20240106140935992

Internet

Internet基础

image-20231215171824967

TCP/IP分层

  1. OSI七层协议模型

    v2-bd9524fab91608122dc1f44633ba080d_1440w

  2. OSI与TCP/IP四层协议的关系

    v2-dc8ac903cd28c9e5b158c1d16677c810_r

    v2-d56ba1deb1a822f05349c6056a862987_1440w

  3. TCP/IP四层协议

    1. 网络层:IP

    2. 传输层:TCP UDP

    3. 应用层:HTTP SSH

    img

IP地址

IP地址是Internet协议的一部分,用于在计算机网络中唯一地标识主机。

  1. IP地址结构

    1. 【IPv4】32位无符号整数 ;【IPv6】128位无符号整数

    2. 网络字节顺序——大端字节顺序

    3. IP地址结构中存放的数据总是以大端法存放的,即使主机字节顺序是小端法

    image-20231215170854018

  2. IP地址的转换

    “n” stands for network,the “p” stands for presentation.

    1. 网络字节顺序转换

      image-20231215171117091

    2. 点分十进制转换

      image-20231215171134856

  3. IP地址的分类

    1. 类型分类:IPv4,IPv6

    2. 地址范围分类

      image-20231215171751684

      image-20231215180427231

    3. 公网私网分类

      1. 私网IP

        1. A类地址:10.0.0.0——10.255.255.255

        2. B类地址:172.16.0.0——172.31.255.255

        3. C类地址:192.168.0.0——192.168.255.255

      2. 公网地址和私网地址的区别

        1. 分配方式不同:公网地址由互联网注册机构分配,而私网地址由局域网管理员自行分配。

        2. 使用范围不同:公网地址用于Internet上的设备,私网地址用于局域网内部的设备。

        3. 唯一性和可达性不同:公网地址具有全球唯一性和全球可达性,而私网地址只在局域网内部唯一,不具有全球可达性。

        4. 转发方式不同:公网地址可以直接访问Internet上的其他设备,而私网地址需要通过路由器进行转发才能访问Internet上的其他设设备。

      3. 私网的实现:子网掩码 计算机网络 IP地址与子网划分

      4. 私网的Internet接入:NAT技术——将私网地址映射成(某一网关)公网地址,并接入Internet

        img

  4. IP地址和MAC地址的区别

    • IP地址是服务商给你的,mac地址是你的网卡物理地址

    • IP地址局域网内可以随便更改,但是mac地址一般不能更改;

    • 长度不同, IP地址为32位,MAC地址为48位

    • 寻址协议层不同, IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。

互联网域名

  1. 域名集合

    • 从节点反向到根的路径形成域名

    • 一级域名由ICANN定义,二级域名由ICANN的授权代理分配,有二级域名的组织可以在子域中创造新域名

    image-20231215180135059

  2. DNS数据库

    • DNS数据库维护域名集合和IP地址之间的映射多对多

    • 本地定义的域名localhost-回送地址127.0.0.1

    • 实际域名Linux>hostname


互联网连接

  1. TCP:点对点,全双工,可靠的

  2. 套接字:套接字是连接的一个端点 IPaddr:port主机+进程

  3. 套接字对:(cliaddr:cliport, servaddr:servport)

    image-20231215185022920

套接字接口

image-20231215205239344

套接字

  1. 套接字

    • 从Linux内核来看,一个套接字就是连接的一个端点

    • 从Linux程序来看,套接字就是一个有相应描述符的打开文件

  2. 套接字对:一个连接是由它两端的套接字地址唯一确定的,这对套接字地址叫做套接字对

    元组表示(cliaddr:cliport,servaddr:servport)

  3. 套接字接口:一组函数,和Unix I/O结合起来创建网络应用

    image-20231215201052647

  4. 套接字地址IPaddr:port,由一个因特网地址和一个16位整数端口组成

  5. 套接字地址结构:因特网的套接字地址存放在如下16字节结构体struct sockaddr_in

    image-20231215205356242

    • sin_family:协议族

    • sin_port:端口号

    • sin_addr:IP 地址

    • sin_zero[8]:空白

接口函数

getaddrinfo

getnameinfo

socket

bind

listen

connect

accept

image-20231215230936935

RIO review

辅助函数

示例:echo

echo客户端

echo服务端

 

Web服务器

Web基础

image-20240106143424650

image-20240106143501835

HTTP事务

image-20240106143549051

image-20240106143612270

服务动态内容

image-20240106143753110

示例:TINY Web Serve